namespace SmartMathLibrary
{
    /// <summary>
    /// Interface to implement a Vector2D class.
    /// </summary>
    public interface IVector2D
    {
        /// <summary>
        /// Gets or sets the scale value of the direction vector component.
        /// </summary>
        /// <value>The scale value of the direction vector component.</value>
        double ScaleValue { get; set; }

        /// <summary>
        /// Gets or sets the position vector component of the vector.
        /// </summary>
        /// <value>The position vector component of the vector.</value>
        GeneralVector2D PositionVector { get; set; }

        /// <summary>
        /// Gets or sets the direction vector component of the vector.
        /// </summary>
        /// <value> The direction vector component of the vector.</value>
        GeneralVector2D DirectionVector { get; set; }

        /// <summary>
        /// Computes the intercept of two vectors in a plane space.
        /// </summary>
        /// <param name="point">The point to which the intercept should be calculated.</param>
        /// <returns>The intercept of two vectors in a plane space.</returns>
        GeneralVector2D Intercept(Vector2D point);

        /// <summary>
        /// Determines whether the current vector [has intercept with] [the specified vector].
        /// </summary>
        /// <param name="point">The vector to which should be checked.</param>
        /// <returns>
        /// 	<c>true</c> if the current vector [has intercept with] [the specified vector]; otherwise, <c>false</c>.
        /// </returns>
        bool HasInterceptWith(Vector2D point);

        /// <summary>
        /// Multiplies the direction vector with the specified scale value and adds the position vector. 
        /// </summary>
        /// <returns>The result of the calculation in form of a GeneralVector</returns>
        GeneralVector2D ToGeneralVector();
    }
}